Skip to content

SHA-8: W5 内测批次、F0~F6 聚合与活动事件治理 - #46

Draft
WardLu wants to merge 2 commits into
mainfrom
feat/growth-loop-w5-funnel-metrics
Draft

SHA-8: W5 内测批次、F0~F6 聚合与活动事件治理#46
WardLu wants to merge 2 commits into
mainfrom
feat/growth-loop-w5-funnel-metrics

Conversation

@WardLu

@WardLu WardLu commented Aug 16, 2026

Copy link
Copy Markdown
Owner

概述

SHA-8(W5)返工:在最新 maineb244cf)上重放 Draft PR #46,修复迁移版本冲突、延迟/内测前行为口径、隐私披露与 activity event 服务端边界。

本 PR 保持 Draft。仓库仍为 shared Supabase 的 proposal-only 范围;未执行共享生产迁移、未合并、未发布。

迁移与指标口径

  • 三份 W5 迁移改为未占用且严格递增的版本:
    • 20260820120000_growth_loop_beta_batches.sql
    • 20260820121000_growth_loop_funnel_aggregation.sql
    • 20260820122000_growth_loop_activity_cleanup.sql
  • ledger 与 activity event 两条成长日路径都受 cohort 边界约束:ledger 按家庭本地日期并同时校验服务端 created_at;event 校验精确 occurred_at >= cohort_start
  • activity event 的 received_at - occurred_at 必须在 0~7 天;超过 7 天不进入有效成长日。
  • F2/72h 使用服务端观察时间(ledger created_at / event received_at),延迟上报不能按旧发生日倒推激活。
  • F5、F6、WMGH 只消费 cohort 后的有效成长日;家庭时区用于日界线。WMGH 在家庭本地自然周开始后第 14 天 00:00 精确冻结(周结束后完整 7 天)。
  • 聚合与清理的 SECURITY DEFINER 函数固定空 search_path,查询显式限定 project_id = 'shadow-mate'

隐私、导出与服务端边界

  • 隐私说明升级为 privacy-v2,同步更新 PRIVACY.mdprivacy-policy.html 中英文内容和发布迁移说明。
  • 新同意写 privacy-v2;已有 privacy-v1 保留原版本/时间戳并继续有效,不自动改写或强制重复确认。
  • 明确区分 Vercel Web Analytics 页面访问数据与 private Supabase backend activity events。
  • 明确 activity event 的标识符、类型、用途、private 访问边界,以及按服务端 received_at 保留 180 天;家庭/学习者删除通过外键级联覆盖,内测批次随家庭删除。
  • 家庭 JSON 仅导出家庭/学习者状态、同意和 Growth Loop 业务记录;不导出 raw private.learning_activity_eventsprivate.learning_beta_batches、Auth/邮箱、会话/设备或 Vercel Analytics 数据。
  • RPC 与表级 CHECK 逐字段限制 UUID、scope、ISO-8601 时间、IANA 时区、客户端版本、event type 和每类 payload 的 key/type/enum/count;拒绝自由文本、完整错误堆栈、URL、邮箱、超长值和未知字段。
  • 增加 received_at 清理索引;无 pg_cron 时迁移安全跳过调度,清理函数仍保留给受信运维。

验证

  • 干净数据库迁移:使用独立 loopback 临时 Postgres,从空库按全部迁移顺序执行成功;未使用 supabase db reset,验证后已删除临时实例。
  • 数据库测试SHADOW_MATE_TEST_DB_URL=<loopback> npm run test:db:12 个 pgTAP 文件、304 项全部通过。覆盖 >7 天延迟、ledger/event cohort 前行为、家庭时区日界线、F2/72h、F5/F6、WMGH 冻结、RLS/普通用户不可读、家庭级联删除、180 天清理边界、无 pg_cron 和 payload 非法/超长值。
  • 数据库 lintprivate schema 无错误/警告;public,private 联合 lint 仅有本 PR 未触及的既有 public.learning_cancel_redemption 未读变量警告。
  • 单元测试npm run test:unit:21 个文件、153 项通过。
  • E2Ecloud.spec.js 29 项、growth-loop.spec.js 4 项通过;覆盖新同意写入 privacy-v2、导出/删除和 local-first Growth Loop 路径。
  • 函数测试:本地 delete-account 隔离保护通过,确认共享 Auth 身份和家庭不会被错误删除。
  • 构建、lint 与文档检查npm run verify 通过(public/security/static/privacy consistency checks、Vite production build、构建产物检查、153 项 coverage test)。
  • 公开仓库闸门:staged 与 origin/main..HEAD 两次检查均通过。

关联:SHA-8(Multica issue 51c9a0b5-5e1d-4ac5-b81d-ca6af51fc3bb

@vercel

vercel Bot commented Aug 16, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
shadow-mate Ready Ready Preview Aug 19, 2026 7:30pm

WardLu added 2 commits August 20, 2026 02:32
- private.learning_beta_batches:内测批次(F0 分母),仅存家庭 ID/批次/时间/状态,
  客户端无访问权,家庭删除级联清理
- private.learning_growth_days 视图 + learning_funnel_status/report/wmgh_weekly
  函数:严格按计划 8.1 + 附件 06 定义 F0~F6 与 WMGH(有效成长日去重、补记排除、
  72h 快速激活、7 天观察窗、自然周冻结)
- private.learning_purge_activity_events + pg_cron 每日任务:activity_events
  滚动 180 天保留自动清理,仅私有内部访问
- 配套 pgTAP 测试:批次表 9 项、漏斗/WMGH 43 项、清理边界 10 项(共 62 项全过,
  全量 221 项无回归)
@WardLu
WardLu force-pushed the feat/growth-loop-w5-funnel-metrics branch from 8771166 to 77ba894 Compare August 19, 2026 19:30
@WardLu WardLu changed the title W5: 内测批次表、F0~F6 聚合与 180 天活动事件清理 SHA-8: W5 内测批次、F0~F6 聚合与活动事件治理 Aug 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant